<?php

namespace app\api\controller;

// use app\common\controller\Api;
// use EasyWeChat\Factory;
use think\Db;



// use fast\Http;

use app\api\controller\Tpmecms;




// use Endroid\QrCode\QrCode as QrCode2;
// use Endroid\QrCode\Color\Color;
// use Endroid\QrCode\Encoding\Encoding;
// use Endroid\QrCode\ErrorCorrectionLevel\ErrorCorrectionLevelLow;
// use Endroid\QrCode\Label\Label;
// use Endroid\QrCode\Logo\Logo;
// use Endroid\QrCode\RoundBlockSizeMode\RoundBlockSizeModeMargin;
// use Endroid\QrCode\Writer\PngWriter;


/**
 * 二维码
 */
class Qrcode extends Tpmecms
{

    protected $noNeedLogin = ['*'];
    protected $noNeedRight = ['*'];

    public function _initialize()
    {
        parent::_initialize();
    }


    /**
     * 分享商品二维码
     *
     * @param integer $goods_id
     * @return void
     */
    public function get_share_goods_qr($goods_id)
    {

        $this->share_goods_qr($goods_id,$this->auth->id);
    }

    /**
     * 获取我的分享二维码
     *
     * @return void
     */
    public function get_share_qr()
    {
       $this->user_get_my_qr($this->auth->id);
    }

    /**
     * 用户获取我的分享二维码
     * @param integer $uid 测试才需要uid
     * @ApiInternal()
     * @return void
     */
    public function user_get_my_qr($uid=null,$self=false)
    {

        // $data['id'] = $this->auth->id;
        // if(!$self){
        //     $uid = $this->auth->id;
        // }
        $data['id'] = $uid;
        $data['type'] = 1;

        //判断文件存在不
        $path = $this->get_img_path($data['type'],$data['id']);
        if(is_file($path)){
            $json['my_qr'] = $this->request->domain().'/'.$path;            
        }else{
            //生成分享二维码            
            $json['my_qr'] = $this->request->domain().'/'.$this->create_wx_qr($data);            
        }
        $json['user'] = Db::name('user')->where('id',$uid)->find();
        $json['ltder'] = Db::name('ltder')->where('uid',$uid)->find();
        if($self){
            return $json['my_qr'];
        }
        return json($json);
    }




    /**
     * 分享商品二维码
     *
     * @param integer $goods_id
     * @param integer $uid
     * @ApiInternal()
     * @return void
     */
    public function share_goods_qr($goods_id=1,$uid=9999999)
    {
        $file_path = $this->get_img_path(3);//获取二维码保存路径
        $filename = 'g'.$goods_id.'_'.$uid.'.png';
        $path = 'pages/i_listxq/i_listxq?id='.$goods_id.'&pid='.$uid;
        $this->success('qr',['qr'=>'/'.$this->create_app_qr($file_path,$filename,$path)
                                ,'user'=>Db::name('user')->where('id',$uid)->find()
                                ,'ltder'=>Db::name('ltder')->where('uid',$uid)->find()
                                ,'house'=>$this->GetGoodsData($goods_id)]);
    }


    // /**
    //  * 获取场地二维码
    //  * @ApiInternal()
    //  * @param int $ltd_id
    //  * @return void
    //  */
    // public function get_space_qrcode($admin_id,$self=false)
    // {
    //     $data['id'] = $admin_id;
    //     $data['type'] = 3;//场地
    //     //判断文件存在不
    //     $path = $this->get_img_path($data['type'],$data['id']);
    //     if(is_file($path)){
    //         $json['my_qr'] = '/'.$path;   //  $this->request->domain().
        
    //     }else{
    //         //生成分享二维码            
    //         $json['my_qr'] = '/'.$this->create_wx_qr($data);    //  $this->request->domain().        
    //     }


    //     //2020-12-25 16:50:42
    //     // 上传二维码
    //     if($self){
    //         return $json['my_qr'];
    //     }
    //     return json($json['my_qr']);
    // }


    /**
     * 创建二维码  返回文件地址
     * @ApiInternal()
     *
     * @param [type] $data
     * @return void
     */
    public function create_app_qr($file_path,$filename,$wx_path='/pages/index/index?pid=9999')
    {
        //获取路径
        $app = $this->get_app();
        $response = $app->app_code->get($wx_path, [
            'width' => 120,
            'line_color' => [
                'r' => 0,
                'g' => 0,
                'b' => 0,
            ],
        ]);
        if ($response instanceof \EasyWeChat\Kernel\Http\StreamResponse) {
            $filename = $response->save($file_path,$filename);
            // halt($filename);
            return $file_path.$filename;
        }
    }


    

    /**
     * 创建二维码  返回文件地址
     * @ApiInternal()
     *
     * @param [type] $data
     * @return void
     */
    public function create_wx_qr($data)
    {

        //获取路径
        
        $id = $data['id'];
        $file_path = $this->get_img_path($data['type']);
        
        // halt($data['type']);
        // halt($data);
        // halt($file_path);
        switch ($data['type']) {
            case '1':
                
                //用户
                $path="pages/index/index?pid=".$id;
                // $file_path = $this->get_img_path();
                break;
            // case '2':
            //     //手艺人
            //     $path="pages/againCode/againCode?id=".$id.'&sid='.$data['storesid'].'&stime='.$data['sb_time'].'&etime='.$data['xb_time'];
            //     // $file_path = $this->get_img_path().'worker/';
            //     break;
            case '3':
                //场地
                $path="pages/i_storesxq/i_storesxq?id=".$id;
                // $path="pages/index/index?pid=".$id;
                // $file_path = $this->get_img_path().'ltd/';
                break;
            default:
                # code...
                break;
        }


        $app = $this->get_app();
        $response = $app->app_code->get($path, [
            'width' => 120,
            'line_color' => [
                'r' => 0,
                'g' => 0,
                'b' => 0,
            ],
        ]);
        if ($response instanceof \EasyWeChat\Kernel\Http\StreamResponse) {
            $filename = $response->save($file_path,$id.'.png');
            // halt($filename);
            return $file_path.$filename;
        }
    }




    
    /**
     * 传入uid 返回文件地址  或者不要后缀的地址
     * @ApiInternal()
     *
     * @param [type] $data
     * @return void
     */
    public function get_img_path($type = 1,$id=null)
    {   
        switch ($type) {
            case '1':
                $file_path = 'assets/qr/user/';
                
                break;
            case '2':
                //公司人员
                $file_path = 'assets/qr/ltder/';
                break;
            case '3':
                //商品
                $file_path = 'assets/qr/goods/';

                break;
            default:
                $file_path = 'assets/qr/';
                break;
        }

        //创建目录
        if (!is_dir($file_path)) {
            mkdir($file_path, 0755, true);
        }

        if($id){
            return $file_path.$id.'.png';
        }else{
            return $file_path;
        }
    }










    /**
     * 创建二维码  返回文件地址
     * @ApiInternal()
     * @param string $uid
     * @param string $file_path
     * @return void
     */
    protected function create_qr($str,$file_path)
    {
        
     


        $qrCode = new QrCode2();
        $qrCode->setText($str); //设置二维码上的内容

        $qrCode->setSize(300);  //二维码尺寸

        $qrCode->setWriterByName('png'); //设置输出的二维码图片格式

        $qrCode->setMargin(10);

        $qrCode->setEncoding('UTF-8');

        // $qrCode->setErrorCorrectionLevel(ErrorCorrectionLevel::HIGH()); //设置二维码的纠错率，可以有low、medium、quartile、hign多个纠错率

        $qrCode->setForegroundColor(['r' => 0, 'g' => 0, 'b' => 0, 'a' => 0]); //设置二维码的rgb颜色和透明度a，这里是黑色

        $qrCode->setBackgroundColor(['r' => 255, 'g' => 255, 'b' => 255, 'a' => 0]); //设置二维码图片的背景底色，这里是白色

        //可能的指定二维码下方的文字，写死15px的字体大小，字体

        // $qrCode->setLabelFontPath(__DIR__.'/vendor/endroid/qr-code/assets/fonts/noto_sans.otf'); //字体路径

        // $qrCode->setLabel('二维码下方的文字1'); //文字

        $qrCode->setLabelFontSize(16); //字体大小

        //或统一用setLabel('二维码下方的文字','字体大小','字体路径','对齐方式')来设置

        // $qrCode->setLabel('二维码下方的文字2', 16, __DIR__.'/vendor/endroid/qr-code/assets/fonts/noto_sans.otf', LabelAlignment::CENTER());

        $qrCode->setLabelMargin(['t'=>50]); //设置标签边距 array('t' => 10,'r' => 20,'b' => 10,'l' => 30)

        //如果要加上logo水印，则在调用setLogoPath和setLogoSize方法

        // $qrCode->setLogoPath(__DIR__.'/logo.png'); //logo水印图片的所在的路径

        $qrCode->setLogoSize(150, 200); //设置logo水印的大小，单位px ，参数如果是一个int数字等比例缩放


        //保存二维码
        if(is_file($file_path)){
            unlink($file_path);
        }
        $qrCode->writeFile($file_path);
     

        

        // $app = $this->get_app();
        // $response = $app->app_code->get($path, [
        //     'width' => 98,
        //     'line_color' => [
        //         'r' => 0,
        //         'g' => 0,
        //         'b' => 0,
        //     ],
        // ]);
        // if ($response instanceof \EasyWeChat\Kernel\Http\StreamResponse) {
        //     $filename = $response->save($file_path,$uid.'.png');
        //     // halt($filename);
        return $file_path;
        // }

    }
 

}